﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;
using SmartDeviceClient.Interfaz;
using SmartDeviceClient.Negocio;
using ClassLibraryEntidades;
using System.Xml.Serialization;
using System.IO;

namespace SmartDeviceClient
{
    static class Program
    {
        //###############################################################################
        //##########                    ATRIBUTOS Y PROPIEDADES                ##########
        //###############################################################################

        #region Atributos y propiedades

            public static WebReference.Service proxy = new SmartDeviceClient.WebReference.Service();

            //public static LocalizadorGPS posicionamiento = new LocalizadorGPS();
            //public static LocalizadorSimulado posicionamiento = new LocalizadorSimulado();
            //public static LocalizadorSigueRuta posicionamiento = new LocalizadorSigueRuta();
            public static Localizador posicionamiento;

            public static BusquedaNatural busqueda;

            public static Configuracion config;

        #endregion



        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [MTAThread]
        static void Main()
        {
            config = new Configuracion();
            try
            {
                XmlSerializer xs = new XmlSerializer(typeof(Configuracion));
                FileStream ms = new FileStream(Program.GetAppPath() + @"Recursos\Config.xml", FileMode.Open);
                config = (Configuracion)xs.Deserialize(ms);
                ms.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("No se ha encontrado fichero de configuracion");
                return;
            }
            if (config.SigueRuta == false)
                posicionamiento = new LocalizadorSimulado();
            else posicionamiento = new LocalizadorSigueRuta();

            Application.Run(new FormLogin());
        }


        /// <summary>
        /// Devuelve el path de la aplicacion para poder acceder a los recursos
        /// </summary>
        /// <returns>El path de la aplicacion</returns>
        public static string GetAppPath()
        {

            System.Reflection.Module[] modules = System.Reflection.Assembly.GetExecutingAssembly().GetModules();

            string aPath = System.IO.Path.GetDirectoryName(modules[0].FullyQualifiedName);

            if ((aPath != "") && (aPath[aPath.Length - 1] != '\\'))

                aPath += '\\';

            return aPath;
        }

    }
}